Linode 架站流程紀錄
每次都忘了記,藉這次機會來記錄一下,用 Linode(Akamai) 要怎麼架站。
先說,我知道靜態網站可以用更簡單的方式,像現在 Linode 有 Object Storage 的方案,或是其他平台主機商也有提供更快速的解決方案。
不過我過去用以下這種方式,才真的比較接觸到 Linux 的有趣之處,所以這次考量後,還是使用這個流程,並且記錄下來。
除了這個網站 郊郊郊狼 外,我的主要創作網站 野火堆,也是用這個方式架成的。
這邊只講流程,沒有要解釋太多的意思,一邊研究一邊架站也是樂趣之一。
一些基本資料和備註:
- 本地端電腦 (Win11 + Powershell)
- Linode 的方案 (這次用 Shared CPU - Nanode 1 GB 方案,每月 5 美金,OS 為 Ubuntu)
- ssh key 我已經先做好了
- 我都是看英文資源,所以要跟以下流程,需要有一定英文基礎
- 這流程是用在靜態網站架設,如果你要用有資料庫的那種,例如 Wordpress,還需要另外安裝資料庫喔!
- 如果你是純小白,這可能會花上你好幾個小時,這很正常。這個流程我做過 3 次,這次還是花了 3-4 小時左右(邊寫邊紀錄),理想上應該 1 小時可以完成
- 如果你要架好幾個網站(不同域名/子域名),可以只買一個方案,然後域名跟 Nginx 那邊要再多設定,這邊先不講了。我是習慣分開方案經營就是了。
linode 設定流程:
設定與建立 Linode (現在叫 Akamai)
- 建立 Linode,選方案跟 root PW
設定與更新 linux
-
使用 ssh 連線,準備更新系統。通常我選 Ubuntu
sudo apt update && apt upgrade -
設定系統 地區 時區
dpkg-reconfigure tzdata -
設定 自訂 hostname example-hostname
example-hostname 改成想要的名字,這樣登入時,localhost 會變成自訂名字。
例如本來是,root@localhost,會變成 root@example
-
更新 host 檔案
nano /etc/hosts加入後面兩行,還有剛剛自己的設定的 host name,X 的部分,Linode 買完方案後會提供 ip,請複製貼上
127.0.0.1 localhost.localdomain localhost
(新增以下兩行)
XXX.X.XXX.XX example-hostname.example.com example-hostname
XXXX:XXXX::XXXX:XXXX:XXXX:XXXX example-hostname.example.com example-hostname -
建立新使用者,example_user 為自訂名稱,請修改
adduser example_user -
將剛新增的使用者賦予 sudo 權限
adduser sudo example_user登出後就可以用使用者作 ssh 登入。 像這樣
ssh example_user@xxx.xxx.xxx.xxx
設定 SSH KEY
-
登入新增是使用者後,建立放 ssh key 資料夾
mkdir -p ~/.ssh && sudo chmod -R 700 ~/.ssh/我已經有自己產生 key,所以這邊是直接傳公鑰到你的遠端主機,本地端請保留私鑰
Win11 可以用 Openssh 來產生鑰匙,相關教學請自己查閱最下方官方文件連結,這邊只講流程
注意: Windows 的 Powershell 沒辦法直接用下面的範例,C 槽會判定成無效 host name。
scp C:\Users\MyUserName\.ssh/id_rsa.pub example_user@XXX.X.X.XXX:~/.ssh/authorized_keys解決辦法是,直接 cd 到 public key 所在資料夾,再用 scp 來傳
cd ./.sshscp id_ed25519.pub example_user@XXX.XXX.XXX.XXX:~/.ssh/authorized_keys -
修改剛上傳至主機的 public key 權限
sudo chmod -R 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys -
登出,使用新增使用者登入,若是初次應該會要求 passphrase 要設定
-
設定禁止 root 登入
sudo nano /etc/ssh/sshd_configconfig 中,PermitRootLogin 修改成 no
# Authentication:
...
PermitRootLogin no
安裝防火牆 UFW
-
允許 ssh
sudo ufw allow ssh -
http port 80,以及 https 443
sudo ufw allow 80/tcp
sudo ufw allow http/tcp
sudo ufw allow 443 -
好了之後可以用 enable 查看,或是用
status看目前加入的白名單sudo ufw enable
sudo ufw status
安裝並設定 Nginx
-
安裝 Nginx
sudo apt install nginx,確認狀態,順利運行的話,下一步
sudo systemctl status nginx -
還沒掛域名的情況下,直接用 ip 例如
http://192.0.2.0,應該會看到 Nginx 首頁 -
unlink 預設 conf 檔案
sudo unlink /etc/nginx/sites-enabled/default -
在 sites-available 底下建立自訂域名的 conf 檔案
sudo touch /etc/nginx/sites-available/example.com記得不用加 .conf 副檔名
-
然後編輯該 conf 檔
sudo nano /etc/nginx/sites-available/example.com貼上,example.com 要改成自己的網域
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
} -
使用串聯指令
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ -
測試 conf 檔輸入正確,正確會顯示 Success
sudo nginx -t -
有成功就重啟
sudo systemctl restart nginx -
conf 有指定 root index 檔案,所以要建立相關資料夾
sudo mkdir /var/www/example.com -
確保 前面新增的使用者可以在 Filezilla 傳輸,記得變更權限
sudo chown -R example_user /var/www/example.com/因為只需要上傳網站到
/var/www/example.com/,所以只指定這個資料夾的權限 -
使用 Cerbot 跑 SSL 流程比較簡單, Cerbot 會幫你把該網域的 nginx conf 檔加入 443,這樣才能處理 https,也可以再一開始設定網站 conf 檔時就加入。
另外憑證位置跟自動續約,按照 cerbot 步驟,都會幫你處理好。
這裡不多說明,基本上就是在 Cerbot 選好你的主機 OS 跟 Nginx,接下來按網站步驟走就好。
其他
- Linode 要記得加入你的域名,要記得設定 A/AAAA Record
- 域名商 那邊要設 DNS,設定方式從 linode 那邊拿
- 記得 UFW 也要加入 443,
sudo ufw allow 443,要不然網址連過去會出現 ERR_CONNECTION_TIMED_OUT
參考來源,來自 Linode 官方文件,詳細說明可以直接在網站看:
https://techdocs.akamai.com/cloud-computing/docs/set-up-and-secure-a-compute-instance
https://www.linode.com/docs/guides/configure-firewall-with-ufw/
https://www.linode.com/docs/guides/how-to-install-and-use-nginx-on-ubuntu-20-04/